好的,Max 的課程進行到這邊,是時候來休息一下,整合前面所學的東西了。要來做的是一個可以讓使用者新增專案的小專案~
專案的結構長這樣:
HTML 的 head 簡單的引入了 css 檔跟 JavaScript 檔,說明一下 body 的架構:
上方跟下方的 template 們是要讓 JavaScript 透過 id
動態渲染資料進來,我們要做的事是抓取到使用者在表單輸入的內容,然後個別驗證 Title、Description、People 的內容,最後按下 ADD PROJECT
按鈕送出一個新的 Project,最後會顯示在下面的 List 裡面。
開工!
一開始先 npm install
下載套件,然後下 tsc -w
指令來自動監看並編譯 .ts 的檔案。我們先來把表格渲染出來吧!Max 帶我們練習物件導向的寫法:
class ProjectInput {
templateElement: HTMLTemplateElement
hostElement: HTMLDivElement
element: HTMLFormElement
constructor() {
this.templateElement = document.getElementById(
'project-input'
)! as HTMLTemplateElement
this.hostElement = document.getElementById('app') as HTMLDivElement
const importedNode = document.importNode(this.templateElement.content, true)
this.element = importedNode.firstElementChild as HTMLFormElement
this.attach()
}
private attach() {
this.hostElement.insertAdjacentElement('afterbegin', this.element)
}
}
const prjInput = new ProjectInput()
上面做了幾件事情:
template
跟要渲染的 div
,為了讓 constructor
裡面可以存取到 templateElement
跟 hostElement
,要先在 class 寫好 field。另外 TypeScript 不知道用 getElementById
方法取到的值是不是真的如同在 field 設定好的型別以及是不是 null
,於是用了驚嘆號確保一定會有這個值以及做了 type casting。importNode
方法,複製了一份指定節點的內容,第二個參數是指說要不要把全部的內容都一併複製。attach()
方法在 hostElement
插入拿到的值。ProjectInput
的實例。畫面出來了!
今天的學習筆記就到這邊,明天是假日,應該可以寫多一點~謝謝閱讀。:)